package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCategoria;
import com.mastercard.assets.jpa.TblPaqueteRegional;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetModificarPaquetesForm;
import com.mastercard.assets.web.util.to.UserLogin;

public class AssetsModificarPaquetesPreparacion
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		int roleId = user.getActualRoleId( ) ;
                
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		try
		{
			// convierte el form y toma la clave
			AssetModificarPaquetesForm f = new AssetModificarPaquetesForm( ) ;
                        int rolId = user.getActualRoleId( ) ;
			
			// toma los elementos encontrados
			TblAsset asset = ( TblAsset ) request.getAttribute( "ItemFinded" ) ;
			
			f.setCveAsset( asset.getCveAsset( ) ) ;
//			f.getPackageManager( ).setCveAsset( asset.getCveAsset( ) ) ;
                        
                        if ( rolId == 6 ) {
                            
                            List< TblPaqueteRegional > sencillos = new ArrayList< TblPaqueteRegional >( ) ;
                            List< TblPaqueteRegional > dobles = new ArrayList< TblPaqueteRegional >( ) ;
                            int SAsignado = 0 , SDisponible = 0 , DAsignado = 0 , DDisponible = 0 , totalPaqReg = 0 ;
                            
                            List< TblPaqueteRegional > tblPaquetesRegionales =  MasterCardDAO.getAllPackagesRegionalOfAsset( asset.getCveAsset( ) , 1 ) ;
                            totalPaqReg = tblPaquetesRegionales.size( ) ;
                            
                            for( TblPaqueteRegional paqReg : tblPaquetesRegionales ) {
                                int x = 1 ;
                                if( paqReg.getHabitacion( ) == 1 ) {
                                    sencillos.add( paqReg ) ;
                                    if( paqReg.getBandera( ) == 1 ) {
                                        SDisponible += x ;
                                    } else if( paqReg.getBandera( ) == 2 ) {
                                        SAsignado += x ;
                                    }
                                } else if( paqReg.getHabitacion( ) == 2 ) {
                                    dobles.add( paqReg ) ;
                                    if( paqReg.getBandera( ) == 1 ) {
                                        DDisponible += x ;
                                    } else if( paqReg.getBandera( ) == 2 ) {
                                        DAsignado += x ;
                                    }
                                }
                            }
                            request.setAttribute("Sencillos", sencillos);
                            request.setAttribute("Dobles", dobles);
                            request.setAttribute("roleId", roleId);
                            request.setAttribute("SAsignado", SAsignado);
                            request.setAttribute("SDisponible", SDisponible);
                            request.setAttribute("DAsignado", DAsignado);
                            request.setAttribute("DDisponible", DDisponible);
                            request.setAttribute("totalPaqReg", "" + totalPaqReg);
                            
                        } else {
                            
                            // actualiza los paquetes
			MCUtil.updatePackageManager( MasterCardDAO.getAllPackagesOfAsset( asset.getCveAsset( ) , 1 ) , f.getPackageManager( ) ) ;
                            
                        }
			
			// coloca el form en el request
			request.setAttribute( "AssetModificarPaquetesForm" , f ) ;
                        request.setAttribute( "rolId" , rolId ) ;
			
		}catch( Exception e )
		{
                    MasterCardDAO.closeEntityManager( ) ;
			user.setMessageError( e.getMessage( ) ) ;
			request.setAttribute( "Categorias" , new ArrayList< TblCategoria >( ) ) ;
		}
		
		// en caso de que se cumpla, guarda el WorkArea
		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsModificarPaqueteDesplegarFormulario.jsp" ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
	}
	
}
